package com.cmc.cloud.cmclink.doc.api.document.req.cargomanifest;

import java.util.List;
import java.util.Set;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;

import org.hibernate.validator.constraints.Length;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * Cargo Manifest 查询请求参数DTO
 * 
 * @author dev89
 * @date 2025/10/09 10:20
 **/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Schema(description = "管理后台 - Cargo Manifest Req")
public class CargoManifestReqDTO {
    @Schema(description = "中转港口")
    @NotBlank(message = "{CargoManifestReqDTO.currentPort.notBlank}")
    @Length(max = 50, message = "{CargoManifestReqDTO.currentPort.length}")
    private String currentPort;

    @Schema(description = "船名")
    @Length(max = 50, message = "{CargoManifestReqDTO.vesselCode.length}")
    private String vesselCode;

    @Schema(description = "航次")
    @Length(max = 50, message = "{CargoManifestReqDTO.voyage.length}")
    private String voyage;

    @Schema(description = "提单号")
    @Length(max = 50, message = "{CargoManifestReqDTO.blNo.length}")
    private String blNo;

    @Schema(description = "提单ID列表")
    private List<Long> blNoIds;

    @Schema(description = "进出口类型：默认EX：出口， IM：进口")
    @Length(max = 10, message = "{CargoManifestReqDTO.exImType.length}")
    private String exImType;

    @Schema(description = "数据来源：si默认、manifest")
    @Length(max = 10, message = "{CargoManifestReqDTO.source.length}")
    private String source;

    @Schema(description = "勾选了表示打印费用")
    @NotNull(message = "{CargoManifestReqDTO.showFreight.NotNull}")
    private Boolean showFreight;

    @Schema(description = "取消沿海调空箱, 勾选了表示表打印含“XGCE”开头的提单这个只有天津在用")
    @NotNull(message = "{CargoManifestReqDTO.cancelEmptyContainer.NotNull}")
    private Boolean cancelEmptyContainer;

    @Schema(description = "勾选了 表示查询结果按照卸货港升序排序。不勾选默认按照提单号升序排序。")
    @NotNull(message = "{CargoManifestReqDTO.sortByPod.NotNull}")
    private Boolean sortByPod;

    @Schema(description = "include all charge")
    @NotNull(message = "{CargoManifestReqDTO.includeAllChange.NotNull}")
    private Boolean includeAllChange;

    @Schema(description = "Replace Shipper/Consignee by Sinolines")
    @NotNull(message = "{CargoManifestReqDTO.replaceScnSinolines.notNull}")
    private Boolean replaceScnSinolines;

    @Schema(description = "货物类型")
    private Set<String> cargoTypes;

    @Schema(description = "箱状态")
    private Set<String> cntrStatuses;

    @Schema(description = "箱类型")
    private Set<String> cntrTypes;

    @Schema(description = "付款方式")
    private Set<String> payments;

    @Schema(description = "订舱人代码")
    private Set<String> bkpCodes;

    @Schema(description = "提单拆分状态：split_combine_type")
    private Set<String> blStatuses;

    @Schema(description = "接货地")
    private Set<String> porCodes;

    @Schema(description = "装货港")
    private Set<String> polCodes;

    @Schema(description = "卸货港")
    private Set<String> podCodes;

    @Schema(description = "目的地")
    private Set<String> delCodes;

    @Schema(description = "舱位代码")
    private Set<String> spaceOwners;

    @Schema(description = "箱主代码")
    private Set<String> cntrOwners;

    @Schema(description = "下载文件类型")
    private String type;
}
